B. Collatz Conjecture

有一个变量和一个常数。下面的操作进行 k 次:

请注意,这两个操作都是在一次操作中依次进行的。

例如,如果数字 x=16y=3k=2 ,那么经过一次运算后, x 就变成了 17 ,而经过另一次运算后, x 就变成了 2 ,因为加一后, x=18 就能被 3 整除两次。

鉴于初始值为 xyk ,马克西姆想知道 x 的最终值是多少。

做时没有思路

x<y :则后面一定是 x+1,x+2,,y1,(1,2,,y1) 呈现周期性。

xy :尽量将 x 降到小于 y

void solve() {
    int x, y, k;cin >> x >> y >> k;
    while (x >= y && k > 0) {
        int t = min(k, y - x % y);
        k -= t;
        x += t;
        while (x % y == 0)x /= y;
    }
    if (x < y) {
        x = (x - 1 + k) % (y - 1) + 1;
    }
    cout << x << '\n';
}